package com.digitalchina.lxnsy.toolkit;

import android.app.Activity;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

/**
 * ================================================
 * 项目名称：bigdata
 * 类描述：管理器管理活动
 * 包名：com.digitalchina.bigdata.toolkit
 * 创建人：郑皓
 * 创建时间：2016/5/20 14:03
 * 修改备注：
 * ================================================
 */

public class ActivityTaskManager {
    private static ActivityTaskManager activityTaskManager = null;
    private List<Activity> mActivityList = null;

    private ActivityTaskManager() {
        mActivityList = new LinkedList<>();
    }


    /**
     * 返回activity管理器的唯一实例对象。
     *
     * @return ActivityTaskManager
     */
    public static synchronized ActivityTaskManager getInstance() {
        if (activityTaskManager == null) {
            activityTaskManager = new ActivityTaskManager();
        }
        return activityTaskManager;
    }


    /**
     * 将一个activity添加到管理器。
     *
     * @param pActivity
     */
    public void addActivity(Activity pActivity) {
        if (mActivityList != null && pActivity != null)
            mActivityList.add(pActivity);
    }

    /**
     * 得到保存在管理器中的Activity对象。
     *
     * @param pClass
     * @return Activity
     */
    public Activity getActivity(Class<?> pClass) {
        Activity activity = null;
        for (int i = 0; i < mActivityList.size(); i++) {
            if (mActivityList.get(i).getClass().equals(pClass)) {
                activity = mActivityList.get(i);
            }
        }
        return activity;
    }

    /**
     * 是否有某一个Activity
     *
     * @param pClass
     * @return
     */
    public boolean hasActivity(Class<?> pClass) {
        Activity activity = null;
        for (int i = 0; i < mActivityList.size(); i++) {
            if (mActivityList.get(i).getClass().equals(pClass)) {
                return true;
            }
        }
        return false;
    }

    /**
     * 返回管理器的Activity是否为空。
     *
     * @return 当且当管理器中的Activity对象为空时返回true，否则返回false。
     */
    public boolean isEmpty() {
        return mActivityList == null || mActivityList.isEmpty();
    }

    /**
     * 返回管理器中Activity对象的个数。
     *
     * @return 管理器中Activity对象的个数。
     */
    public int size() {
        return mActivityList.size();
    }


    /**
     * 关闭指定的动的Activity。
     */
    public void closeActivity(Class<?> pClass) {

        for (int i = 0; i < mActivityList.size(); i++) {
            if (mActivityList.get(i).getClass().equals(pClass)) {
                Activity act = mActivityList.get(i);
                act.finish();
                mActivityList.remove(act);
                i--; // 移除activity后要-1
            }
        }

    }


    /**
     * 关闭所有活动的Activity。
     */
    public void closeAllActivity() {

        for (Activity act : mActivityList) {
            if (act != null)
                act.finish();
        }
        if (mActivityList != null)
            mActivityList.clear();

    }

    /**
     * 关闭所有活动的Activity除了指定的一个之外。
     *
     * @param pClass 指定的不关闭的Activity对象的名字。
     */
    public void closeAllActivityExceptOne(Class<?> pClass) {

        List<Activity> tempActivity = new ArrayList<>();

        for (int i = 0; i < mActivityList.size(); i++) {
            if (!mActivityList.get(i).getClass().equals(pClass)) {
                Activity activity = mActivityList.get(i);
                activity.finish();
                tempActivity.add(activity);
            }
        }
        mActivityList.remove(tempActivity);
    }

    /**
     * 移除Activity对象,如果它未结束则结束它。
     *
     * @param pClass Activity对象的名字。
     */
    public void removeActivity(Class<?> pClass) {
        for (int i = 0; i < mActivityList.size(); i++) {
            if (mActivityList.get(i).getClass().equals(pClass)) {
                mActivityList.remove(i);
                i--; // @warning
            }
        }
    }

    /**
     * 移除当前activity
     *
     * @param pActivity
     */
    public void removeActivity(Activity pActivity) {

        if (mActivityList != null)
            mActivityList.remove(pActivity);

    }

}
